package com.sharkpro.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.security.Permission;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * 用户
 * @TableName sys_user
 */
@TableName(value ="sys_user")
@Data
public class SysUser implements Serializable , UserDetails {
    /**
     *
     */
    private Integer id;

    /**
     * 用户名称
     */
    private String name;

    /**
     * 账号
     */
    private String account;

    /**
     * 密码
     */
    private String password;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 修改时间
     */
    private Date updateTime;

    /**
     * 是否是管理员 0不是1是
     */
    private Integer admin;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    // 获取权限列表，本来是需要实现UserDetail接口中的getAuthorities()方法，但是Lombok的Data注解帮助实现了
    @TableField(exist = false)
    private Collection<? extends GrantedAuthority> authorities;

    @TableField(exist = false)
    private List<Permission> permissionList;

    // Security根据此方法获取用户密码
    @Override
    public String getPassword() {
        return password;
    }

    // Security根据此方法获取用户账户
    @Override
    public String getUsername() {
        return account;
    }

    // 检查账户是否未过期
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    // 检查账户是否未被锁定
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    // 检查凭证是否未过期
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    // 检查账户是否启用
    @Override
    public boolean isEnabled() {
        return true;
    }
}

